/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uff.javaavancado.controller;

import br.uff.javaavancado.controletransacao.FabricaDeAppService;
import br.uff.javaavancado.exception.AplicacaoException;
import br.uff.javaavancado.modelos.Cliente;
import br.uff.javaavancado.service.ClienteService;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.model.ListDataModel;

/**
 *
 * @author proac
 */
public class ClienteController extends BaseController {

    private ListDataModel tabelaClientes;
    private Cliente clienteCorrente;
    private ClienteService clienteService;

    public ClienteController() {
        try {
            clienteService = FabricaDeAppService.getAppService(ClienteService.class);
        } catch (Exception ex) {
            Logger.getLogger(ClienteController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String novoCadastro() {
        clienteCorrente = new Cliente();
        return "novoCliente";
    }
    
    public String editarCadastro() {
        LoginController sessao = (LoginController) getBean("LoginController");
        clienteCorrente = sessao.getClienteLogado();
        return "novoCliente";
    }

    public String cadastrarCliente() {
        if (clienteCorrente.getId() == null) {
            clienteService.salvar(clienteCorrente);
        } else {
            clienteService.atualizar(clienteCorrente);
        }
        return "controleCliente";
    }

    public String novoCliente() {
        clienteCorrente = new Cliente();
        return "editarCliente";
    }
    
    public String visualizarCliente() {
        clienteCorrente = (Cliente) tabelaClientes.getRowData();
        return "editarCliente";
    }

    public String salvarCliente() {
        if (clienteCorrente.getId() == null) {
            clienteService.salvar(clienteCorrente);
        } else {
            clienteService.atualizar(clienteCorrente);
        }
        return "controleCliente";
    }

    public String deletarCliente() {
        clienteCorrente = (Cliente) tabelaClientes.getRowData();
        try {
            clienteService.excluir(clienteCorrente);
        } catch (AplicacaoException e) {
            this.error(getMensagemBundled("erroDeletarCliente"));
        }
        return null;
    }

    public ListDataModel getTabelaClientes() {
        List clientes = clienteService.getListaCompleta();
        tabelaClientes = new ListDataModel(clientes);
        return tabelaClientes;
    }

    public void setTabelaClientes(ListDataModel tabelaClientes) {
        this.tabelaClientes = tabelaClientes;
    }

    public Cliente getClienteCorrente() {
        return clienteCorrente;
    }

    public void setClienteCorrente(Cliente clienteCorrente) {
        this.clienteCorrente = clienteCorrente;
    }

    public ClienteService getClienteService() {
        return clienteService;
    }

    public void setClienteService(ClienteService clienteService) {
        this.clienteService = clienteService;
    }
}
